import pytest
from application import create_app
from application import db as database
# 放置pytest需要用到的fixture

# 使用测试配置创建app对象并返回
@pytest.fixture(scope='session')
def app():
    app = create_app('test_settings')
    return app


# scope='session' 表示这个fixture下整个测试会话中创, 只有测试会话开始的时候创建一次
@pytest.fixture(scope='session')
def db(app, request):
    database.app = app
    # 创建测试需要的所有表
    database.create_all()

    # 注销的方法,测试结束的时候会回调
    def teardown():
        # 删除所有的表
        database.drop_all()

    # 注册结束回调方法
    request.addfinalizer(teardown)
    return database


# scope=function表示没测此时用例方法执行之前都会执行一次
@pytest.fixture(scope='function')
def session(db, request):
    session = db.create_scoped_session()
    db.session = session

    # 表示每个方法执行完事执行
    def teardown():
        session.remove()

    request.addfinalizer(teardown)
    return session

